package com.barry.io.controller;

import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;

/**
 * 智能体
 *
 * @author: zlt
 * @date: 2025/3/1
 * <p>
 * Blog: https://my.oschina.net/zlt2000
 * Github: https://github.com/zlt2000
 */
@RestController
@RequestMapping("/code")
public class CodeGenAgentController {
    private final ChatClient chatClient;

    public CodeGenAgentController(ChatClient.Builder builder) {
        this.chatClient = builder
                .defaultOptions(
                        DashScopeChatOptions.builder()
                                .withTemperature(0.1)
                                //.withModel("deepseek-v3")
                                .withModel("qwen-max")
                                .build()
                )
                .build();
    }

    /**
     * 翻译助手智能体
     * @param input 要翻译的内容
     * @param target 目标语言
     */
    @GetMapping(value = "/gen")
    public String gen(@RequestParam String input, @RequestParam(required = false) String target, HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8");

        input = URLDecoder.decode(input, StandardCharsets.UTF_8);
        if (StringUtils.isEmpty(target)) {
            target = "en-US";
        }

        String systemPrompt = """
               你是拥有10年经验的JAVA架构师和前端架构师，擅长设计SpringCloud高并发微服务：
               1. **代码完整性要求**：要求多文件结构,指定必要的模块/组件；
               2. **实现细节**：代码遵循PEP8规范,架构要求："使用MVC设计模式",依赖说明："注明所需的第三方库及版本"；
               3. **输出格式**：输出每个文件,格式可以是: Java、xml、text、properties等。
               """;

        PromptTemplate promptTemplate = new PromptTemplate("""
                TARGET_LANG: {target}
                "{content}"
                """);
        Prompt prompt = promptTemplate.create(Map.of("target", target, "content", input));

        String result = chatClient.prompt(prompt)
                .system(systemPrompt)
                .call()
                .content();
        System.out.println(result);
        return result;
    }
}
